// 封装函数技巧：
// 三要素：函数功能，参数，返回值
// 功能：函数名起名时，尽量要体现出函数的功能，是动词
// 参数：已知条件，也可以这么想：重复代码中的不同之处就是参数（变量）
// 返回值：结果。


// 功能：保存cookie
// 参数：
//   键：key
//   值：value
//   保存时长：dayCount 单位（天）
//   可以访问的路径:path
//   可以访问的域名：domain

// 返回值：无

function saveCookie(key,value,dayCount,path,domain){
    let d = new Date();
    d.setDate(d.getDate()+dayCount);
    // escape:编码，把中文字符编成百分号编码。
    let str =`${key}=${escape(value)};expires=${d.toGMTString()}`;
    if(path){
        str+=`;path=${path}`;
    }
    if(domain){
        str+=`;domain=${domain}`;
    }
    document.cookie = str;    
}

//功能： 获取cookie
// 参数：
//    键：key
//返回值：键对应的值，如果没有，返回null。

function getCookie(key){

    let str = unescape(document.cookie); // username=田瑞雪; head=1.jpg; city=西安

    let arr = str.split("; ");  //["username=田瑞雪","head=1.jpg","city=西安"]

    for(let i=0;i<arr.length;i++){
        let newArr = arr[i].split("="); //arr[0] = username=田瑞雪   newArr = arr[0].split("=")
        if(newArr[0]==key){
            return newArr[1];
        }
    }
    return null;
}


// 删除cookie
// 不能直接删除cookie，但是可以设置失效时间为过去，就可以完成删除
// 参数：
//   键

// 返回值：无  

function removeCookie(key){
    // let d = new Date();
    // d.setDate(d.getDate()-1);
    // let str =`${key}=byebye;expires=${d.toGMTString()}`;
    // document.cookie = str;    
    saveCookie(key,"byebye",-1);
}

// 修改cookie
//   cookie中是用键来标识唯一性的（其实，所有键值对都是用键来标识唯一性），所以，修改cookie，就调用saveCookie。